/*
*  @file
*  @description  请求文件，是对于axios的二次封装
*/

import axios from 'axios';
import { Message } from 'element-ui';
import store from '@/store';
// import { response } from 'express';
// import { config } from 'vue/types/umd';
axios.defaults.baseURL = '/shiyan' //process.env.VUE_APP_BASE_URL;
axios.defaults.timeout = process.env.VUE_APP_TIMEOUT;

/**
 * 请求拦截器
 */

axios.interceptors.request.use(config => {
    // 请求头里添加验证配置项
    config.headers.Authorization = store.getters.token;
    return config;
},error => Promise.reject(error));

axios.interceptors.response.use(response =>{
    const {data,meta:{status,msg}} = response.data;
    if(status == 200 || status == 201){
        return data;
    }
    Message.error(msg);
    return Promise.reject(msg);

},error =>{
    const msg = error.toString();
    if(msg.includes('Network Error')){
        Message.error('请求失败，请检查您的网络是否正常');
        return promise.reject(error);
    }
    if(msg.includes('Timeout')){
        Message.error('请求超时，请稍后再试');
        return promise.reject(error);
    }
    const { status } = error.response;
    switch (status) {
        case 401:
            Message.error('登录超时，请您重新登陆');
            //清空token，并且跳到登录页（代办）
            //todo处理超时跳转
            this.$store.dispatch('exit');
            break;
        case 500:
            Message.error('接口请求失败，请稍后再试');
            break;
        case 404:
            Message.error('抱歉，接口不存在');
            break;
        default:
            break;
    }
    return promise.reject(error);
});

export default axios;